Credit Card Transactions Fraud Detection via Continual Learning¶
Adathalmaz elemzés¶
Benyák Bence - Klenk Botond
A feladatunk egy a Kaggleről származó generált bankkártyás tranzakciók adathalmazának feldolgozása és folyamatos tanulással történő csalásdetekciója lesz.
Az adathalmaz főbb részei:
- Időpont: Az adathalmazban szereplő tranzakciók időbélyege
- Összeg: A tranzakció összege
- Kártytulajdonos: A tranzakcióhoz tartozó kártya tulajdonosának adatai (kártyaszám, név, lakóhely, születési idő, munka)
- Kereskedő: A tranzakciót végrehajtó kereskedő adatai (cégnév, kategória, földrajzi hely)
- Csalás: A tranzakció csalás volt-e vagy sem
In [ ]:
import pandas as pd
import plotly.io as pio
pio.renderers.default='notebook'
import plotly.express as px
pd.set_option('display.max_columns', None)
In [ ]:
df = pd.read_csv("../data/fraudTrain.csv").drop(columns=["Unnamed: 0"])
In [ ]:
df.head()
Out[ ]:
| trans_date_trans_time | cc_num | merchant | category | amt | first | last | gender | street | city | state | zip | lat | long | city_pop | job | dob | trans_num | unix_time | merch_lat | merch_long | is_fraud | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2019-01-01 00:00:18 | 2703186189652095 | fraud_Rippin, Kub and Mann | misc_net | 4.97 | Jennifer | Banks | F | 561 Perry Cove | Moravian Falls | NC | 28654 | 36.0788 | -81.1781 | 3495 | Psychologist, counselling | 1988-03-09 | 0b242abb623afc578575680df30655b9 | 1325376018 | 36.011293 | -82.048315 | 0 |
| 1 | 2019-01-01 00:00:44 | 630423337322 | fraud_Heller, Gutmann and Zieme | grocery_pos | 107.23 | Stephanie | Gill | F | 43039 Riley Greens Suite 393 | Orient | WA | 99160 | 48.8878 | -118.2105 | 149 | Special educational needs teacher | 1978-06-21 | 1f76529f8574734946361c461b024d99 | 1325376044 | 49.159047 | -118.186462 | 0 |
| 2 | 2019-01-01 00:00:51 | 38859492057661 | fraud_Lind-Buckridge | entertainment | 220.11 | Edward | Sanchez | M | 594 White Dale Suite 530 | Malad City | ID | 83252 | 42.1808 | -112.2620 | 4154 | Nature conservation officer | 1962-01-19 | a1a22d70485983eac12b5b88dad1cf95 | 1325376051 | 43.150704 | -112.154481 | 0 |
| 3 | 2019-01-01 00:01:16 | 3534093764340240 | fraud_Kutch, Hermiston and Farrell | gas_transport | 45.00 | Jeremy | White | M | 9443 Cynthia Court Apt. 038 | Boulder | MT | 59632 | 46.2306 | -112.1138 | 1939 | Patent attorney | 1967-01-12 | 6b849c168bdad6f867558c3793159a81 | 1325376076 | 47.034331 | -112.561071 | 0 |
| 4 | 2019-01-01 00:03:06 | 375534208663984 | fraud_Keeling-Crist | misc_pos | 41.96 | Tyler | Garcia | M | 408 Bradley Rest | Doe Hill | VA | 24433 | 38.4207 | -79.4629 | 99 | Dance movement psychotherapist | 1986-03-28 | a41d7549acf90789359a9aa5346dcb46 | 1325376186 | 38.674999 | -78.632459 | 0 |
In [ ]:
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1296675 entries, 0 to 1296674 Data columns (total 22 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 trans_date_trans_time 1296675 non-null object 1 cc_num 1296675 non-null int64 2 merchant 1296675 non-null object 3 category 1296675 non-null object 4 amt 1296675 non-null float64 5 first 1296675 non-null object 6 last 1296675 non-null object 7 gender 1296675 non-null object 8 street 1296675 non-null object 9 city 1296675 non-null object 10 state 1296675 non-null object 11 zip 1296675 non-null int64 12 lat 1296675 non-null float64 13 long 1296675 non-null float64 14 city_pop 1296675 non-null int64 15 job 1296675 non-null object 16 dob 1296675 non-null object 17 trans_num 1296675 non-null object 18 unix_time 1296675 non-null int64 19 merch_lat 1296675 non-null float64 20 merch_long 1296675 non-null float64 21 is_fraud 1296675 non-null int64 dtypes: float64(5), int64(5), object(12) memory usage: 217.6+ MB
Profiling¶
Az adathalmazról készítettünk egy reportot a ydata_profiling segítségével.
Ez a következőkez tartalmazza:
- Általános információk: Az adathalmaz mérete, a hiányzó adatok száma, a duplikált sorok száma
- Változók: Az adathalmazban szereplő változók listája, és azok elemzése
- Interakciók: Az adathalmazban szereplő változók közötti interakciók elemzése
- Korreláció: A változók közötti korreláció
- Hiányzó adatok: Az adathalmazban szereplő hiányzó adatok elemzése
In [ ]:
from ydata_profiling import ProfileReport
type_schema = {
"cc_num": "categorical",
"merchant": "categorical",
"category": "categorical",
"gender": "categorical",
"city": "categorical",
"state": "categorical",
"zip": "categorical",
"job": "categorical",
}
profile = ProfileReport(df, title="Report",
type_schema=type_schema,
dark_mode=True,
correlations = {
"phi_k": {"calculate": True},
}
)
profile.to_notebook_iframe()
Summarize dataset: 0%| | 0/5 [00:00<?, ?it/s]
Generate report structure: 0%| | 0/1 [00:00<?, ?it/s]
Render HTML: 0%| | 0/1 [00:00<?, ?it/s]
Csalások vizsgálata¶
Először a csalások eloszlását szeretnénk megvizsgálni különböző szempontok szerint, összehasonlítva az összes tranzakió eloszlásával.
In [ ]:
frauds = df['is_fraud'].value_counts().reset_index()
frauds.columns = ['is_fraud', 'count']
frauds.is_fraud = frauds.is_fraud.map({0: 'Not Fraud', 1: 'Fraud'})
fig = px.pie(frauds, values='count', names='is_fraud', title='Frauds distribution')
fig.show()
Időbeliség¶
In [ ]:
date_tran_fig = px.histogram(df, x='trans_date_trans_time', histfunc='count', title='Transactions by date')
date_fraud_fig = px.histogram(df[df['is_fraud'] == 1], x='trans_date_trans_time', histfunc='count', title='Frauds by date')
date_tran_fig.show()
date_fraud_fig.show()